package cheme.ProcessModel.Interpreter;

import cheme.ProcessModel.ProcessModel;
import cheme.ProcessModel.Equations.Equation;
import cheme.ProcessModel.Interpreter.IRuleCheckVisitor.RuleCheckVisitorStub;
import cheme.ProcessModel.ProcessUnits.Streams.Stream;
import cheme.ProcessModel.ProcessUnits.Streams.Tags.OverallTagComponent;
import cheme.ProcessModel.ProcessUnits.Streams.Tags.Tag;
import cheme.ProcessModel.ProcessUnits.Streams.Tags.TagComponent;
import cheme.ProcessModel.Visitors.ReflectiveVisitor;

public class PostparseRuleChecker extends RuleCheckVisitorStub
{
//	JB-Experiment
	public Object visit(ProcessModel modelElement)
	{
			add(PostParseRules.processModelCheck);
			//add(PostParseRules.Validatediagram);//PA Change
			//add(PostParseRules.equationIndependence);// PA Chnage
			return ReflectiveVisitor.NullReturn;
	}
	
	public Object visit(Tag modelElement)
	{
		add(PostParseRules.tagSumsToLessThanOne);		
		return ReflectiveVisitor.NullReturn;
	}
	
	public Object visit(OverallTagComponent modelElement)
	{
//		add(PostParseRules.tagCompPreParseRules);
//		add(PostParseRules.tagComPreParseRules);
//		add(PostParseRules.tPreParseRules);
//		add(PostParseRules.tagPreParseRules);
//
//		return ReflectiveVisitor.NullReturn;
		
		add(PostParseRules.tagComponentNonEmptyText);
		add(PostParseRules.tagComponentIsSpecified);
		add(PostParseRules.tagReferrentsExist);
		add(PostParseRules.tagComponentUniqueID);
		
		add(PostParseRules.tagComponentRefsNotCircular);
		// PA Change
		add(PostParseRules.tagComponentUnitCheckAllChildren);
		add(PostParseRules.Validatediagram);//PA Change

		return ReflectiveVisitor.NullReturn;
	}
	
	public Object visit(TagComponent modelElement)
	{
//		add(PostParseRules.tagCompPreParseRules);
//		add(PostParseRules.tagComPreParseRules);
//		add(PostParseRules.tPreParseRules);
//		add(PostParseRules.tagPreParseRules);
//
//		return ReflectiveVisitor.NullReturn;
		
		add(PostParseRules.tagComponentNonEmptyText);
		add(PostParseRules.tagComponentIsSpecified);
		add(PostParseRules.tagReferrentsExist);
		add(PostParseRules.tagComponentUniqueID);
		
		add(PostParseRules.tagComponentRefsNotCircular);
		
		// PA Change
		//add(PostParseRules.tagComponentUnitNotSameAsOverAll);
		add(PostParseRules.tagComponentUnitCheckAllChildren);
		add(PostParseRules.Validatediagram); //PA Change		
		
		return ReflectiveVisitor.NullReturn;
	}
	
	public Object visit(Equation modelElement)
	{
//		add(PostParseRules.equPreParseRules);
//		add(PostParseRules.equatiPreParseRules);
//		add(ParseRuleCheckerPreParseRules);
//
//		return ReflectiveVisitor.NullReturn;
		
		//add(PostParseRules.equationNonEmptyText);
		add(PostParseRules.equationReferrentsExist);
		add(PostParseRules.equationIsCorrect);
		//add(PostParseRules.unitAgreementEx);
		add(PostParseRules.equationIndependence);// PA Chnage
		return ReflectiveVisitor.NullReturn;
	}
	
	// PA Experiment
	public Object visit(Stream modelElement)
	{
		add(PostParseRules.streamCheck);
		return ReflectiveVisitor.NullReturn;		
	}
}
